package ComoViajo;

import java.util.HashMap;

public abstract class FactoryEstaciones {
	
	private static HashMap<String, EstacionSubte> estacionesGuardadasSubte=new HashMap<String, EstacionSubte>();
	private static HashMap<String, EstacionTren> estacionesGuardadasTren=new HashMap<String, EstacionTren>();

	// Por convencion se escribe el metodo de acceso primero (public, protected...) 
	//luego static, volatile, transient, etc luego final o no final y luego el tipo de retorno
	public static EstacionSubte crearEstacionSubte(String nombre, String linea) {
		Direccion direccion = null;
		return FactoryEstaciones.crearEstacionSubte(nombre, linea, direccion);
	}	
	
	public static EstacionTren crearEstacionTren(String nombre, String linea) {
		Direccion direccion = null;
		return FactoryEstaciones.crearEstacionTren(nombre, linea, direccion);
	}
	
	public static EstacionTren crearEstacionTren(String nombre, String linea,Direccion direccion) {
		EstacionTren estacion= new EstacionTren(nombre, linea,direccion); 
		
		EstacionTren estacionBuscada = FactoryEstaciones.estacionesGuardadasTren.get(estacion.toString());
		if(estacionBuscada == null) {
			FactoryEstaciones.estacionesGuardadasTren.put(estacion.toString(), estacion);
			estacionBuscada=estacion;
		}
		
		return estacionBuscada;
				
	}

	//  MANTENER COHERENCIA DE CODIGO. public static o static public, en el mundo java se suele usar
	// la primera, ambas funcionan pero si usan la segunda usenla en todo el codigo.
	public static EstacionSubte crearEstacionSubte(String nombre, String linea,Direccion direccion) {
		EstacionSubte estacion=new EstacionSubte(nombre, linea,direccion);
		EstacionSubte estacionBuscada = FactoryEstaciones.estacionesGuardadasSubte.get(estacion.toString());
		if(estacionBuscada == null) {
			FactoryEstaciones.estacionesGuardadasSubte.put(estacion.toString(), estacion);
			estacionBuscada=estacion;
		}
		
		return estacionBuscada;
	}
		

}
